package kr.co.kiso.pub.iv.sr.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.co.kiso.usr.common.BaseController;
import kr.co.kiso.usr.iv.sr.service.IVSRService;
import kr.co.kiso.usr.iv.sr.vo.IVSRVo;
import kr.co.kiso.usr.utils.PaginationInfo;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
@RequestMapping("/pub/iv/sr/*")
public class PIVSRController extends BaseController {
	@Autowired
	private IVSRService ivsrService;

	private final String FILE_PATH = "/iv/sr";

	Logger log = Logger.getLogger(getClass());
	
	/**
	 * 반환할 jsp 파일 정의
	 * @param vo
	 * @return
	 */
	public ModelAndView getJspFile(IVSRVo vo, HttpServletRequest req){
		ModelAndView mav = new ModelAndView();
		StringBuffer jspFile= new StringBuffer();
//		jjp	:재무제표
		if(vo.getIs_type().equals("jjp")//재무제표
				){
			return mav;
		}else{
//		srp	:영업보고서
//		mrp	:월간리포트
//		arp	:annual report
//		ctb	:Fact Book
//		etc	:기타
			log.debug("ets");
			//게시판
			String url = req.getServletPath();
			url = url.replaceAll(".do", "");
			
			String[] urlSplit = url.split("/");
			
			for(int i=2; i<= urlSplit.length ;i++){
				if(i==urlSplit.length){
					jspFile.append("/");
					jspFile.append(vo.getIs_type());
					jspFile.append("/");
					jspFile.append(urlSplit[i-1]);
				}else{
					jspFile.append("/");
					jspFile.append(urlSplit[i-1]);
				}
			}
		}
		
		log.debug("ets");
		mav = new ModelAndView(jspFile.toString());
		
		return mav;
	}
	/**
	 * 목록 화면
	 * @param vo
	 * @param req
	 * @param res
	 * @return
	 * @throws Exception
	 */
	@RequestMapping
	public ModelAndView ivsr010Q(IVSRVo vo, HttpServletRequest req,
			HttpServletResponse res) throws Exception {
		vo.setOrder_by("");
		ModelAndView mav = getJspFile(vo,req);
		
		if(vo.getSrc_is_title()!=null && !vo.getSrc_is_title().equals("")){
			vo.setSrc_is_title("%"+vo.getSrc_is_title()+"%");
		}
		if(vo.getSrc_value()!=null ){
			vo.setSrc_value("%"+vo.getSrc_value()+"%");
		}
		
		//사용자 페이지에서 특정년을 기준으로 검색하고자 할때설정 시작
		if(vo.getIs_type().equals("mrp")//월간리포트
				|| vo.getIs_type().equals("cjp")//연결재무제표
				){
			if (vo.getSrc_year() == null || "".equals(vo.getSrc_year())) {
//				Date today = new Date();
//				SimpleDateFormat date = new SimpleDateFormat("yyyy");
//				vo.setSrc_year(date.format(today));
				vo.setSrc_year("2011");
			}
			mav.addObject("yyyy", vo.getSrc_year());
			
			//자료가 있는 년도만 표시되도록 한다
			mav.addObject("yearList", ivsrService.ivsr017Q(vo));
			
		}
		//사용자 페이지에서 특정년을 기준으로 검색하고자 할때설정 종료
		
		// 페이징 시작
		PaginationInfo paginationInfo = new PaginationInfo();
		int currnetPageNo = vo.getCurrentPageNo() <= 1 ? 1 : (Integer) vo
				.getCurrentPageNo();
		vo.setCurrentPageNo(currnetPageNo);
		vo.setParamMap(requestPram2Map(req));
//		if (vo.getSch_title() != null && !vo.getSch_title().equals("")) {
//			vo.setSch_title("%" + vo.getSch_title() + "%");
//		}
		int iTotalCnt = ivsrService.ivsr010Q_cnt(vo);
		vo.setTotalRecordCount(iTotalCnt);
		
		if(iTotalCnt>0){
			List list = null;
			//파일만 가져오기 이미지 빼고
			if(vo.getIs_type().equals("srp")//영업보고서
					||vo.getIs_type().equals("arp")//Anual Report
					||vo.getIs_type().equals("ctb")//Fact Book
					
					){
				//이미지 파일도 포함해서 가져오기
				vo.setRecordCountPerPage(12);
				list = ivsrService.ivsr012Q(vo);
			}else if(vo.getIs_type().equals("irf")//faq
					){
				//content 정보도 가져오기
				list = ivsrService.ivsr013Q(vo);
			}else if(vo.getIs_type().equals("jjp")//재무제표
					){
				list = ivsrService.ivsr014Q(vo);
				mav.addObject("list", list);
			}else if(vo.getIs_type().equals("cjp")//연결 재무제표
					){
				mav.addObject("map", ivsrService.ivsr015Q(vo));
				
				List dataList = ivsrService.ivsr016Q(vo);
				
				List lst1=new ArrayList();
				List lst2=new ArrayList();
				
				for(int i=0; i< dataList.size();i++){
					Map map = (Map) dataList.get(i);
					if(i==0){
						mav.addObject("maxYear", map.get("YEAR"));
					}else if(i== (dataList.size()-1) ){
						mav.addObject("minYear", map.get("YEAR"));
					}
					
					if(i>2){
						lst2.add(map);
					}else{
						lst1.add(map);
					}
				}
				
				mav.addObject("list1",lst1);
				mav.addObject("list2",lst2);
				
			}else{
				if(vo.getIs_type().equals("mrp")//월간리포트
						){
					vo.setOrder_by("quarter");
					vo.setRecordCountPerPage(12);
				}
				list = ivsrService.ivsr010Q(vo);
			}
			
			if(!vo.getIs_type().equals("jjp")
					&& !vo.getIs_type().equals("cjp")
					){
				//재무제표는 파일을 안부른다
				List returnList = new ArrayList();
				for(int i=0; i < list.size(); i++){
					Map map = (Map) list.get(i);

					int fileCnt =Integer.parseInt(String.valueOf( map.get("FILE_CNT")));
					if(fileCnt>0){
						IVSRVo files = new IVSRVo();
						
						int is_seq_no = Integer.parseInt(String.valueOf( map.get("IS_SEQ_NO")));
						
						files.setIs_seq_no(is_seq_no);

						//파일만 가져오기 이미지 빼고
						if(vo.getIs_type().equals("mrp")//월간 리포트
								||vo.getIs_type().equals("arp")//Anual Report
								||vo.getIs_type().equals("ctb")//Fact Book
								|| vo.getIs_type().equals("srp")//영업보고서
								){
							files.setFile_type("1");	
						}
						
						map.put("fileList", ivsrService.ivsr031Q(files));	
					}
					returnList.add(map);
					mav.addObject("list", returnList);
				}
			}
			
			
			mav.addObject("pageHtml", vo.getToPubHtml("./ivsr010Q.do"));
			mav.addObject("paginationInfo", vo);
		}
		
		//공지 데이터 불러오기 불러오는 게시판 : IR  소식, 
		if(vo.getIs_type().equals("irs")
				|| vo.getIs_type().equals("irf")
				|| vo.getIs_type().equals("ent")
				
				){
			List list = ivsrService.ivsr011Q(vo);
			
			List returnList = new ArrayList();
			for(int i=0; i < list.size(); i++){
				Map map = (Map) list.get(i);

				int fileCnt =Integer.parseInt(String.valueOf( map.get("FILE_CNT")));
				if(fileCnt>0){
					IVSRVo files = new IVSRVo();
					
					int is_seq_no = Integer.parseInt(String.valueOf( map.get("IS_SEQ_NO")));
					
					files.setIs_seq_no(is_seq_no);
					map.put("fileList", ivsrService.ivsr031Q(files));	
				}
				returnList.add(map);
				mav.addObject("noticeList", returnList);
			}
		}
			

		return mav;
	}
	
	/**
	 * 상세보기 수정전에 view 페이지
	 * @param vo
	 * @param req
	 * @param res
	 * @return
	 * @throws Exception
	 */
	@RequestMapping
	public ModelAndView ivsr060Q(IVSRVo vo, HttpServletRequest req,
			HttpServletResponse res) throws Exception {

		ModelAndView mav = getJspFile(vo,req);

		mav.addObject("map", ivsrService.ivsr030Q(vo));
		mav.addObject("is_type", vo.getIs_type());
		if(vo.getIs_type().equals("srp")|| 
				vo.getIs_type().equals("mrp")
				|| vo.getIs_type().equals("arp")
				|| vo.getIs_type().equals("ctb")
				){
			List fileList = ivsrService.ivsr031Q(vo);
			
			List files = new ArrayList();
			List imgFiles = new ArrayList();
			if(fileList!=null && fileList.size()>0){
				for(int i =0; i < fileList.size() ; i++){
					Map map = (Map) fileList.get(i);
					String fileType = (String)map.get("FILE_TYPE");
					
					//이미지 일때
					if(fileType!=null){
						if(fileType.equals("1")){
							imgFiles.add(map);
						}else{//첨부파일일때
							files.add(map);
						}	
					}
					
				}
				
				mav.addObject("fileList", imgFiles);
				mav.addObject("imgFiles",files );
			}

		}else{
			mav.addObject("fileList", ivsrService.ivsr031Q(vo));	
		}
		
		List nextList =  ivsrService.ivsr032Q(vo);
		if(nextList!=null && nextList.size()>0){
			for(int i=0; i< nextList.size();i++){
				Map next = (Map) nextList.get(i);
				if("1".equals(String.valueOf( next.get("TYPE")))){
//					이전
					mav.addObject("nextInfo1", next);	
				}else{
//					다음
					mav.addObject("nextInfo2", next);
				}
				
			}
		}
		return mav;
	}
	
	
	/**
	 * 조회수 업데이트
	 * @param vo
	 * @param req
	 * @param res
	 * @return
	 * @throws Exception
	 */
	@RequestMapping
	public ModelAndView ivsr070T(IVSRVo vo, HttpServletRequest req,
			HttpServletResponse res) throws Exception {

		ModelAndView mav = new ModelAndView("/common/toJson");
		Map returnMap = new HashMap();
		
		ivsrService.ivsr070T(vo);
		
		mav.addObject("map",returnMap) ;
		return mav;
	}
}
